package bill

import (
	"jlpay-sdk-go/pkg/jlpay/core"
	"jlpay-sdk-go/pkg/jlpay/models"
)

// OrderInfoQueryRequest 订单信息查询请求
//
// @author liaochangyi
// @since 2025-01-25
type OrderInfoQueryRequest struct {
	models.OrgBaseRequest
	// OrderID 嘉联订单号
	OrderID string `json:"order_id,omitempty"`
}

// NewOrderInfoQueryRequest 创建订单信息查询请求
func NewOrderInfoQueryRequest() *OrderInfoQueryRequest {
	return &OrderInfoQueryRequest{}
}

// SetOrderID 设置嘉联订单号
func (r *OrderInfoQueryRequest) SetOrderID(orderID string) *OrderInfoQueryRequest {
	r.OrderID = orderID
	return r
}

// ToMap 转换为map
func (r *OrderInfoQueryRequest) ToMap() (map[string]interface{}, error) {
	// 先获取基类的map
	baseMap, err := r.OrgBaseRequest.ToMap()
	if err != nil {
		return nil, err
	}

	// 添加自己的字段
	if r.OrderID != "" {
		baseMap["order_id"] = r.OrderID
	}

	return baseMap, nil
}

// CheckRequiredParams 检查必需参数
func (r *OrderInfoQueryRequest) CheckRequiredParams(config *core.Config) error {
	return r.OrgBaseRequest.CheckRequiredParams(config)
}

// GetApiUrl 获取API URL
func (r *OrderInfoQueryRequest) GetApiUrl() string {
	return "/open/bill/trans-charge/query"
}

// ==================== 订单信息查询响应 ====================

// OrderInfoQueryResponse 订单信息查询响应
type OrderInfoQueryResponse struct {
	models.StandardResponse
	// MerchNo 商户号
	MerchNo string `json:"merch_no,omitempty"`
	// TermNo 终端号
	TermNo string `json:"term_no,omitempty"`
	// OutOrderID 客户订单号
	OutOrderID string `json:"out_order_id,omitempty"`
	// OrderID 嘉联订单号
	OrderID string `json:"order_id,omitempty"`
	// ChnTransactionID 渠道订单号，微信、支付宝、银联侧的订单号（码付交易时有）
	ChnTransactionID string `json:"chn_transaction_id,omitempty"`
	// OriOrderID 原嘉联订单号（退款交易时有）
	OriOrderID string `json:"ori_order_id,omitempty"`
	// TransTime 交易时间（yyyy-MM-dd HH:mm:ss）
	TransTime string `json:"trans_time,omitempty"`
	// Amount 交易金额（单位为分）
	Amount interface{} `json:"amount,omitempty"`
	// FeeType 计费类型
	FeeType string `json:"fee_type,omitempty"`
	// CardType 卡类型，0：借记卡 1：贷记卡 2：余额
	CardType string `json:"card_type,omitempty"`
	// TransFee 应收手续费，单位为分，收款交易手续费为正值，退款交易手续费为负值，无手续费为0，说明：该手续费为优惠减免前的手续费
	TransFee interface{} `json:"trans_fee,omitempty"`
	// FinnalFee 实收手续费，单位为分，收款交易手续费为正值（优惠减免后手续费）退款交易手续费为负值，无手续费为0，说明：该手续费为优惠减免后的手续费，且以此字段作为该笔订单手续费
	FinnalFee interface{} `json:"finnal_fee,omitempty"`
	// SubOpenid 用户身份id（码付交易时有）
	SubOpenid string `json:"sub_openid,omitempty"`
	// Remark 备注产品来源：立牌/电子码牌、银行卡、外接码付、订单POS、智能SDK
	Remark string `json:"remark,omitempty"`
}

// NewOrderInfoQueryResponse 创建订单信息查询响应
func NewOrderInfoQueryResponse() *OrderInfoQueryResponse {
	return &OrderInfoQueryResponse{}
}
